package livre;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Set;

public class Library {
	
	/**
	 * Base de données des auteurs
	 */
	private String[] auteurs = { "LEVY", "HIGGINS CLARK", "BARJAVEL", "RUFIN", "HUGO" };
	
	/**
	 * Livres disponibles avec auteur, titre et année
	 */
	private HashMap<Livre, String[]> livresDisponibles;
   
  /**
	 * Détails des emprunts avec livre emprunté, emprunteur et date de l'emprunt
	 */
	private HashMap<Livre, String[]> emprunts;
	
	/**
	 * 
	 */
	public Library(){
		livresDisponibles = new HashMap<Livre, String[]>();
    emprunts = new HashMap<Livre, String[]>();
	}
	
	/**
	 * Stocker un livre dans la bibliotheque
	 * @param livre
	 */
	public void stockerLivre(Livre livre){
		
		// vérifier que le livre possède un titre, un auteur et une année de parution valides
		if(livre.getAuteur() != null && livre.getTitre() != null && livre.getAnnee() > 0){
			
			// vérifier que l'auteur est référencé dans la base de données
			if(estReference(livre.getAuteur())){
				String[] inf = { livre.getAuteur(), livre.getTitre(), Integer.toString(livre.getAnnee()) };
				livresDisponibles.put(livre, inf);
			}
		}
		
	}
	
	public boolean estReference(String auteur){
		
		for(String a : auteurs){
			if(a.equals(auteur)) return true;
		}
		
		return false;
		
	}
	
	/**
	 * Rechercher un livre par titre.
	 * @param titre
	 * @return
	 */
	public Livre rechercherLivre(String titre){
		
		if(titre!=null && titre!=""){
		
			for(Livre l : livresDisponibles.keySet()){
				
				if(titre.equals(l.getTitre())) return l;
				
			}
			
		}
		
		return null;
	}
   
  /**
	 * Emprunter un livre de la bibliothèque
	 * @param livre
	 * @param emprunteur
	 */
	public void emprunterLivre(Livre livre, String emprunteur){
		
		if(livre != null && emprunteur != null && emprunteur != ""){
			
			// récupère les livres de la bibliothèque
			Set<Livre> livres = livresDisponibles.keySet();
			
			// si le livre est disponibles dans la bibliothèqye
			if(livres.contains(livre)){
			
				Date date = new Date();
				DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
				
				String[] details = { emprunteur, dateFormat.format(date) };
				
				// ajoute le livre aux empruntés
				emprunts.put(livre, details);
				
				// retire les livres des disponibles
				livresDisponibles.remove(livre);
				
			}
			
		}
		
	}
	
	/**
	 * Rendre un livre
	 * @param livre
	 * @param rendeur
	 */
	public void rendreLivre(Livre livre, String rendeur){
		
		// vérifier la validité du livre, de l'identité du "rendeur" et vérifier que le livre a bien été emprunté
		if(livre != null && rendeur != null && rendeur != "" && emprunts.containsKey(livre)){
			
			String[] details = emprunts.get(livre);
			
			// vérifier que la personne qui rend le livre est celle qui l'a emprunté
			if(details[0].equals(rendeur)){
				emprunts.remove(livre);
			}
			
		}
		
	}
	
	/**
	 * 
	 * @return
	 */
	public String[] getAuteurs() {
		return auteurs;
	}

	/**
	 * 
	 * @param auteurs
	 */
	public void setAuteurs(String[] auteurs) {
		this.auteurs = auteurs;
	}
	
	/**
	 * 
	 * @return
	 */
	public HashMap<Livre, String[]> getLivresDisponibles() {
		return livresDisponibles;
	}

	/**
	 * 
	 * @param livresDisponibles
	 */
	public void setLivresDisponibles(HashMap<Livre, String[]> livresDisponibles) {
		this.livresDisponibles = livresDisponibles;
	}
   
  /**
	 * 
	 * @return
	 */
	public HashMap<Livre, String[]> getEmprunts() {
		return emprunts;
	}


	/**
	 * 
	 * @param emprunts
	 */
	public void setEmprunts(HashMap<Livre, String[]> emprunts) {
		this.emprunts = emprunts;
	}
	
}

